{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 安装并导入工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>性别</th>\n",
       "      <th>玫瑰套餐</th>\n",
       "      <th>紫罗兰套餐</th>\n",
       "      <th>郁金香套餐</th>\n",
       "      <th>百合套餐</th>\n",
       "      <th>康乃馨套餐</th>\n",
       "      <th>胡姬花套餐</th>\n",
       "      <th>生日套餐</th>\n",
       "      <th>情人节套餐</th>\n",
       "      <th>会员卡类型</th>\n",
       "      <th>入会月数</th>\n",
       "      <th>会费支付方式</th>\n",
       "      <th>平均月消费</th>\n",
       "      <th>总消费</th>\n",
       "      <th>已停付会费</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>女</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>年卡</td>\n",
       "      <td>9</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>65.6</td>\n",
       "      <td>593.3</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>男</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>月卡</td>\n",
       "      <td>9</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>59.9</td>\n",
       "      <td>542.4</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>男</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>月卡</td>\n",
       "      <td>4</td>\n",
       "      <td>就餐时付费</td>\n",
       "      <td>73.9</td>\n",
       "      <td>280.85</td>\n",
       "      <td>是</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>男</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>月卡</td>\n",
       "      <td>13</td>\n",
       "      <td>就餐时付费</td>\n",
       "      <td>98.0</td>\n",
       "      <td>1237.85</td>\n",
       "      <td>是</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>女</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>否</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>是</td>\n",
       "      <td>月卡</td>\n",
       "      <td>9</td>\n",
       "      <td>花呗付款</td>\n",
       "      <td>69.4</td>\n",
       "      <td>571.45</td>\n",
       "      <td>否</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   用户码 性别 玫瑰套餐 紫罗兰套餐 郁金香套餐 百合套餐 康乃馨套餐 胡姬花套餐 生日套餐 情人节套餐 会员卡类型  入会月数 会费支付方式  \\\n",
       "0    1  女    是     是     否    是     否     是    是     否    年卡     9   手工转账   \n",
       "1    2  男    否     否     否    否     否     否    否     是    月卡     9   手工转账   \n",
       "2    3  男    否     否     否    否     是     否    否     否    月卡     4  就餐时付费   \n",
       "3    4  男    是     否     否    是     是     否    是     是    月卡    13  就餐时付费   \n",
       "4    5  女    否     是     否    否     否     是    是     是    月卡     9   花呗付款   \n",
       "\n",
       "   平均月消费      总消费 已停付会费  \n",
       "0   65.6    593.3     否  \n",
       "1   59.9    542.4     否  \n",
       "2   73.9   280.85     是  \n",
       "3   98.0  1237.85     是  \n",
       "4   69.4   571.45     否  "
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "# 导入数据包\n",
    "import numpy as np #导入NumPy\n",
    "import pandas as pd #导入Pandas\n",
    "df_member = pd.read_csv('易速鲜花会员留存.csv') #载入数据集\n",
    "df_member.head() #显示数据头几行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>入会月数</th>\n",
       "      <th>平均月消费</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>7043.000000</td>\n",
       "      <td>7043.000000</td>\n",
       "      <td>7043.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3522.000000</td>\n",
       "      <td>32.371149</td>\n",
       "      <td>64.761692</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>2033.283305</td>\n",
       "      <td>24.559481</td>\n",
       "      <td>30.090047</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>18.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1761.500000</td>\n",
       "      <td>9.000000</td>\n",
       "      <td>35.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3522.000000</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>70.350000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>5282.500000</td>\n",
       "      <td>55.000000</td>\n",
       "      <td>89.850000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>7043.000000</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>118.750000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               用户码         入会月数        平均月消费\n",
       "count  7043.000000  7043.000000  7043.000000\n",
       "mean   3522.000000    32.371149    64.761692\n",
       "std    2033.283305    24.559481    30.090047\n",
       "min       1.000000     0.000000    18.250000\n",
       "25%    1761.500000     9.000000    35.500000\n",
       "50%    3522.000000    29.000000    70.350000\n",
       "75%    5282.500000    55.000000    89.850000\n",
       "max    7043.000000    72.000000   118.750000"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_member.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据清洗"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from pandas.api.types import is_numeric_dtype #导入is_numeric_dtype工具\n",
    "is_numeric_dtype(df_member['总消费']) #是否为数值字段？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_member['总消费'] = pd.to_numeric(df_member['总消费'], errors='coerce') # 把总消费字段换成数值字段\n",
    "df_member['总消费'].fillna(0, inplace=True) # 补充0值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from pandas.api.types import is_numeric_dtype\n",
    "is_numeric_dtype(df_member['平均月消费'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 把总消费字段转换成数值字段\n",
    "df_member['总消费'] = pd.to_numeric(df_member['总消费'], errors='coerce')\n",
    "df_member['总消费'].fillna(0, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from pandas.api.types import is_numeric_dtype\n",
    "is_numeric_dtype(df_member['总消费'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x576 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt #导入绘图工具\n",
    "plt.figure(figsize=(10,8)) #图片大小\n",
    "plt.subplot(2, 2, 1) #子图1\n",
    "ax = df_member.groupby('性别').count()['用户码'].plot.pie(autopct='%1.0f%%') #饼图1\n",
    "plt.subplot(2, 2, 2) #子图2\n",
    "ax = df_member.groupby('会费支付方式').count()['用户码'].plot.pie(autopct='%1.0f%%') #饼图2\n",
    "plt.subplot(2, 2, 3) #子图3\n",
    "ax = df_member.groupby('会员卡类型').count()['用户码'].plot.pie(autopct='%1.0f%%') #饼图3\n",
    "plt.subplot(2, 2, 4) #子图4\n",
    "ax = df_member.groupby('已停付会费').count()['用户码'].plot.pie(autopct='%1.0f%%') #饼图4\n",
    "plt.show() #显示"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 把汉子转换成0、1值\n",
    "df_member['已停付会费'].replace(to_replace='是', value=1, inplace=True)\n",
    "df_member['已停付会费'].replace(to_replace='否', value=0, inplace=True)\n",
    "df_member['性别'].replace(to_replace='女', value=0, inplace=True)\n",
    "df_member['性别'].replace(to_replace='男', value=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 其他的是、否字段转换成布尔类型数据\n",
    "binary_features = ['玫瑰套餐', '紫罗兰套餐', '郁金香套餐', '百合套餐', '康乃馨套餐', '胡姬花套餐', '生日套餐', '情人节套餐']\n",
    "for field in binary_features:\n",
    "    df_member[field] = df_member[field] == '是'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>性别</th>\n",
       "      <th>玫瑰套餐</th>\n",
       "      <th>紫罗兰套餐</th>\n",
       "      <th>郁金香套餐</th>\n",
       "      <th>百合套餐</th>\n",
       "      <th>康乃馨套餐</th>\n",
       "      <th>胡姬花套餐</th>\n",
       "      <th>生日套餐</th>\n",
       "      <th>情人节套餐</th>\n",
       "      <th>会员卡类型</th>\n",
       "      <th>入会月数</th>\n",
       "      <th>会费支付方式</th>\n",
       "      <th>平均月消费</th>\n",
       "      <th>总消费</th>\n",
       "      <th>已停付会费</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>年卡</td>\n",
       "      <td>9</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>65.60</td>\n",
       "      <td>593.3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>月卡</td>\n",
       "      <td>9</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>59.90</td>\n",
       "      <td>542.4</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>月卡</td>\n",
       "      <td>4</td>\n",
       "      <td>就餐时付费</td>\n",
       "      <td>73.90</td>\n",
       "      <td>280.85</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>月卡</td>\n",
       "      <td>13</td>\n",
       "      <td>就餐时付费</td>\n",
       "      <td>98.00</td>\n",
       "      <td>1237.85</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>月卡</td>\n",
       "      <td>9</td>\n",
       "      <td>花呗付款</td>\n",
       "      <td>69.40</td>\n",
       "      <td>571.45</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7038</th>\n",
       "      <td>7039</td>\n",
       "      <td>0</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>年卡</td>\n",
       "      <td>13</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>55.15</td>\n",
       "      <td>742.9</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7039</th>\n",
       "      <td>7040</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>月卡</td>\n",
       "      <td>2</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>50.30</td>\n",
       "      <td>92.75</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7040</th>\n",
       "      <td>7041</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>月卡</td>\n",
       "      <td>22</td>\n",
       "      <td>就餐时付费</td>\n",
       "      <td>85.10</td>\n",
       "      <td>1873.7</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7041</th>\n",
       "      <td>7042</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>双年卡</td>\n",
       "      <td>67</td>\n",
       "      <td>手工转账</td>\n",
       "      <td>67.85</td>\n",
       "      <td>4627.65</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7042</th>\n",
       "      <td>7043</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>双年卡</td>\n",
       "      <td>63</td>\n",
       "      <td>就餐时付费</td>\n",
       "      <td>59.00</td>\n",
       "      <td>3707.6</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>7043 rows × 16 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       用户码  性别   玫瑰套餐  紫罗兰套餐  郁金香套餐   百合套餐  康乃馨套餐  胡姬花套餐   生日套餐  情人节套餐 会员卡类型  \\\n",
       "0        1   0   True   True  False   True  False   True   True  False    年卡   \n",
       "1        2   1  False  False  False  False  False  False  False   True    月卡   \n",
       "2        3   1  False  False  False  False   True  False  False  False    月卡   \n",
       "3        4   1   True  False  False   True   True  False   True   True    月卡   \n",
       "4        5   0  False   True  False  False  False   True   True   True    月卡   \n",
       "...    ...  ..    ...    ...    ...    ...    ...    ...    ...    ...   ...   \n",
       "7038  7039   0  False  False   True  False  False   True  False  False    年卡   \n",
       "7039  7040   1  False  False  False   True  False  False  False  False    月卡   \n",
       "7040  7041   1   True  False  False  False  False  False  False   True    月卡   \n",
       "7041  7042   1   True   True   True  False   True   True  False   True   双年卡   \n",
       "7042  7043   1   True   True   True   True   True  False   True   True   双年卡   \n",
       "\n",
       "      入会月数 会费支付方式  平均月消费      总消费  已停付会费  \n",
       "0        9   手工转账  65.60    593.3      0  \n",
       "1        9   手工转账  59.90    542.4      0  \n",
       "2        4  就餐时付费  73.90   280.85      1  \n",
       "3       13  就餐时付费  98.00  1237.85      1  \n",
       "4        9   花呗付款  69.40   571.45      0  \n",
       "...    ...    ...    ...      ...    ...  \n",
       "7038    13   手工转账  55.15    742.9      0  \n",
       "7039     2   手工转账  50.30    92.75      0  \n",
       "7040    22  就餐时付费  85.10   1873.7      1  \n",
       "7041    67   手工转账  67.85  4627.65      0  \n",
       "7042    63  就餐时付费  59.00   3707.6      0  \n",
       "\n",
       "[7043 rows x 16 columns]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_member"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 绘制生存曲线\n",
    "我们使用Kaplan-Meier生存曲线来查看普通客户的生存率。 使用下面的代码，我们可以将KM生存曲线拟合到客户流失数据，并以置信区间绘制我们的生存曲线。 生存曲线是累积的。 意思是，在下图中，在20个月后，客户不取消服务的机会刚好超过80％。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import lifelines # 导入生存分析工具包\n",
    "kmf = lifelines.KaplanMeierFitter() # 创建KMF模型\n",
    "kmf.fit(df_member['入会月数'], # 拟合易速鲜花会员流失数据\n",
    "        event_observed=df_member['已停付会费'], \n",
    "        label='会员预期留存线')\n",
    "fig, ax = plt.subplots(figsize=(10,6)) # 画布\n",
    "kmf.plot(ax=ax) # 绘图\n",
    "ax.set_title('Kaplan-Meier留存曲线-易速鲜花会员们') # 图题\n",
    "ax.set_xlabel('入会月数') # X轴标签\n",
    "ax.set_ylabel('留存率(%)') # Y轴标签\n",
    "plt.show() # 显示图片"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 按照不同的类别生存曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "def life_by_cat(feature, t='入会月数', event='已停付会费', df=df_member, ax=None): # 定义分类留存曲线函数\n",
    "    for cat in df[feature].unique(): # 遍历类别\n",
    "        idx = df[feature] == cat # 当前类别\n",
    "        kmf = lifelines.KaplanMeierFitter() # 创建KaplanMeier模型\n",
    "        kmf.fit(df[idx][t], event_observed=df[idx][event], label=cat) # 拟合模型\n",
    "        kmf.plot(ax=ax, label=cat) # 绘图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig_pmt, ax_pmt = plt.subplots(figsize=(10, 6)) #  画布 \n",
    "life_by_cat(feature='会费支付方式', ax=ax_pmt) # 调用函数\n",
    "ax_pmt.set_title('会费支付方式对留存的影响') # 图题\n",
    "ax_pmt.set_title('入会月数') # X轴标签\n",
    "ax_pmt.set_title('留存率(%)') # Y轴标签\n",
    "plt.show() # 显示图片"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig_contract, ax_contract = plt.subplots(figsize=(10,6)) #画布\n",
    "life_by_cat(feature='会员卡类型', ax=ax_contract) #调用函数\n",
    "ax_contract.set_title('会员卡类型对留存的影响') #图题\n",
    "ax_contract.set_xlabel('入会月数') #X轴标签\n",
    "ax_contract.set_ylabel('留存率(%)') #Y轴标签\n",
    "plt.show() #显示图片"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig_gender, ax_gender = plt.subplots(figsize=(10,6)) #画布\n",
    "life_by_cat(feature='性别', ax=ax_gender) #调用函数\n",
    "ax_gender.set_title('性别对留存的影响') #图题\n",
    "ax_gender.set_xlabel('入会月数') #X轴标签\n",
    "ax_gender.set_ylabel('留存率(%)') #Y轴标签\n",
    "plt.show() #显示图片"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Cox比例危害模型\n",
    "为了检查不同功能的影响，我们将使用Cox比例危害模型。 我们可以将其视为生存回归模型。可以认为“危险”会增加/减少生存机会。 例如，在我们的业务问题中，危害可能是客户拥有的合同类型。具有多年合同的客户取消合同的频率可能比具有月度合同的客户取消合同的频率低。 一个限制是模型假设各组之间的危害随时间变化的比率是恒定的。 Lifeline为CoxPHFitter对象提供了一个内置的check_assumptions方法。 经过一些数据清理，包括编码分类变量（k-1虚拟变量），我们可以将生存回归模型拟合到数据中。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据整理\n",
    "先做数据整理工作，把每个数据字段都转换为可以处理的字段"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>性别</th>\n",
       "      <th>玫瑰套餐</th>\n",
       "      <th>紫罗兰套餐</th>\n",
       "      <th>郁金香套餐</th>\n",
       "      <th>百合套餐</th>\n",
       "      <th>康乃馨套餐</th>\n",
       "      <th>胡姬花套餐</th>\n",
       "      <th>生日套餐</th>\n",
       "      <th>情人节套餐</th>\n",
       "      <th>入会月数</th>\n",
       "      <th>平均月消费</th>\n",
       "      <th>总消费</th>\n",
       "      <th>已停付会费</th>\n",
       "      <th>会员卡类型_年卡</th>\n",
       "      <th>会员卡类型_月卡</th>\n",
       "      <th>会费支付方式_微信自动扣款</th>\n",
       "      <th>会费支付方式_手工转账</th>\n",
       "      <th>会费支付方式_花呗付款</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>9</td>\n",
       "      <td>65.60</td>\n",
       "      <td>593.3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>9</td>\n",
       "      <td>59.90</td>\n",
       "      <td>542.4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>4</td>\n",
       "      <td>73.90</td>\n",
       "      <td>280.85</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>13</td>\n",
       "      <td>98.00</td>\n",
       "      <td>1237.85</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>9</td>\n",
       "      <td>69.40</td>\n",
       "      <td>571.45</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7038</th>\n",
       "      <td>7039</td>\n",
       "      <td>0</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>13</td>\n",
       "      <td>55.15</td>\n",
       "      <td>742.9</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7039</th>\n",
       "      <td>7040</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>2</td>\n",
       "      <td>50.30</td>\n",
       "      <td>92.75</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7040</th>\n",
       "      <td>7041</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>22</td>\n",
       "      <td>85.10</td>\n",
       "      <td>1873.7</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7041</th>\n",
       "      <td>7042</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>67</td>\n",
       "      <td>67.85</td>\n",
       "      <td>4627.65</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7042</th>\n",
       "      <td>7043</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>63</td>\n",
       "      <td>59.00</td>\n",
       "      <td>3707.6</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>7043 rows × 19 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       用户码  性别   玫瑰套餐  紫罗兰套餐  郁金香套餐   百合套餐  康乃馨套餐  胡姬花套餐   生日套餐  情人节套餐  入会月数  \\\n",
       "0        1   0   True   True  False   True  False   True   True  False     9   \n",
       "1        2   1  False  False  False  False  False  False  False   True     9   \n",
       "2        3   1  False  False  False  False   True  False  False  False     4   \n",
       "3        4   1   True  False  False   True   True  False   True   True    13   \n",
       "4        5   0  False   True  False  False  False   True   True   True     9   \n",
       "...    ...  ..    ...    ...    ...    ...    ...    ...    ...    ...   ...   \n",
       "7038  7039   0  False  False   True  False  False   True  False  False    13   \n",
       "7039  7040   1  False  False  False   True  False  False  False  False     2   \n",
       "7040  7041   1   True  False  False  False  False  False  False   True    22   \n",
       "7041  7042   1   True   True   True  False   True   True  False   True    67   \n",
       "7042  7043   1   True   True   True   True   True  False   True   True    63   \n",
       "\n",
       "      平均月消费      总消费  已停付会费  会员卡类型_年卡  会员卡类型_月卡  会费支付方式_微信自动扣款  会费支付方式_手工转账  \\\n",
       "0     65.60    593.3      0         1         0              0            1   \n",
       "1     59.90    542.4      0         0         1              0            1   \n",
       "2     73.90   280.85      1         0         1              0            0   \n",
       "3     98.00  1237.85      1         0         1              0            0   \n",
       "4     69.40   571.45      0         0         1              0            0   \n",
       "...     ...      ...    ...       ...       ...            ...          ...   \n",
       "7038  55.15    742.9      0         1         0              0            1   \n",
       "7039  50.30    92.75      0         0         1              0            1   \n",
       "7040  85.10   1873.7      1         0         1              0            0   \n",
       "7041  67.85  4627.65      0         0         0              0            1   \n",
       "7042  59.00   3707.6      0         0         0              0            0   \n",
       "\n",
       "      会费支付方式_花呗付款  \n",
       "0               0  \n",
       "1               0  \n",
       "2               0  \n",
       "3               0  \n",
       "4               1  \n",
       "...           ...  \n",
       "7038            0  \n",
       "7039            0  \n",
       "7040            0  \n",
       "7041            0  \n",
       "7042            0  \n",
       "\n",
       "[7043 rows x 19 columns]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#把分类字段转换为哑编码\n",
    "category_features = ['会员卡类型', '会费支付方式'] #要转换的分类的字段\n",
    "df_member = pd.get_dummies(df_member, #哑变量的个数会比总类别数少1 \n",
    "                           drop_first=True, #这是因为drop_first=True\n",
    "                           columns=category_features) #这能够避免回归中的多重共线性问题 \n",
    "df_member #显示数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 创建并拟合模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "could not convert string to float: ''",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "Input \u001b[0;32mIn [33]\u001b[0m, in \u001b[0;36m<cell line: 2>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m cph \u001b[38;5;241m=\u001b[39m lifelines\u001b[38;5;241m.\u001b[39mCoxPHFitter() \u001b[38;5;66;03m#创建模型\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m \u001b[43mcph\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdf_member\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mduration_col\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m入会月数\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mevent_col\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m已停付会费\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mshow_progress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/lifelines/utils/__init__.py:56\u001b[0m, in \u001b[0;36mCensoringType.right_censoring.<locals>.f\u001b[0;34m(model, *args, **kwargs)\u001b[0m\n\u001b[1;32m     53\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(function)\n\u001b[1;32m     54\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mf\u001b[39m(model, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m     55\u001b[0m     \u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39mset_censoring_type(model, \u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39mRIGHT)\n\u001b[0;32m---> 56\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunction\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/lifelines/fitters/coxph_fitter.py:290\u001b[0m, in \u001b[0;36mCoxPHFitter.fit\u001b[0;34m(self, df, duration_col, event_col, show_progress, initial_point, strata, weights_col, cluster_col, robust, batch_mode, timeline, formula, entry_col, fit_options)\u001b[0m\n\u001b[1;32m    184\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m    185\u001b[0m \u001b[38;5;124;03mFit the Cox proportional hazard model to a right-censored dataset. Alias of `fit_right_censoring`.\u001b[39;00m\n\u001b[1;32m    186\u001b[0m \n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m    287\u001b[0m \n\u001b[1;32m    288\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m    289\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstrata \u001b[38;5;241m=\u001b[39m utils\u001b[38;5;241m.\u001b[39mcoalesce(strata, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstrata)\n\u001b[0;32m--> 290\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_model \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_fit_model\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    291\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdf\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    292\u001b[0m \u001b[43m    \u001b[49m\u001b[43mduration_col\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    293\u001b[0m \u001b[43m    \u001b[49m\u001b[43mevent_col\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mevent_col\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    294\u001b[0m \u001b[43m    \u001b[49m\u001b[43mshow_progress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mshow_progress\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    295\u001b[0m \u001b[43m    \u001b[49m\u001b[43minitial_point\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minitial_point\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    296\u001b[0m \u001b[43m    \u001b[49m\u001b[43mstrata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstrata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    297\u001b[0m \u001b[43m    \u001b[49m\u001b[43mweights_col\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mweights_col\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    298\u001b[0m \u001b[43m    \u001b[49m\u001b[43mcluster_col\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcluster_col\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    299\u001b[0m \u001b[43m    \u001b[49m\u001b[43mrobust\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrobust\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    300\u001b[0m \u001b[43m    \u001b[49m\u001b[43mbatch_mode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbatch_mode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    301\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtimeline\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeline\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    302\u001b[0m \u001b[43m    \u001b[49m\u001b[43mformula\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mformula\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    303\u001b[0m \u001b[43m    \u001b[49m\u001b[43mentry_col\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mentry_col\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    304\u001b[0m \u001b[43m    \u001b[49m\u001b[43mfit_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfit_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    305\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    306\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/lifelines/fitters/coxph_fitter.py:610\u001b[0m, in \u001b[0;36mCoxPHFitter._fit_model\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m    608\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_fit_model\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m    609\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbaseline_estimation_method \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbreslow\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m--> 610\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_fit_model_breslow\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    611\u001b[0m     \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbaseline_estimation_method \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mspline\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m    612\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_fit_model_spline(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/lifelines/fitters/coxph_fitter.py:623\u001b[0m, in \u001b[0;36mCoxPHFitter._fit_model_breslow\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m    619\u001b[0m model \u001b[38;5;241m=\u001b[39m SemiParametricPHFitter(\n\u001b[1;32m    620\u001b[0m     penalizer\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpenalizer, l1_ratio\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39ml1_ratio, strata\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstrata, alpha\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39malpha, label\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_label\n\u001b[1;32m    621\u001b[0m )\n\u001b[1;32m    622\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m utils\u001b[38;5;241m.\u001b[39mCensoringType\u001b[38;5;241m.\u001b[39mis_right_censoring(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m--> 623\u001b[0m     \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    624\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m model\n\u001b[1;32m    625\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/lifelines/utils/__init__.py:56\u001b[0m, in \u001b[0;36mCensoringType.right_censoring.<locals>.f\u001b[0;34m(model, *args, **kwargs)\u001b[0m\n\u001b[1;32m     53\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(function)\n\u001b[1;32m     54\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mf\u001b[39m(model, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m     55\u001b[0m     \u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39mset_censoring_type(model, \u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39mRIGHT)\n\u001b[0;32m---> 56\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunction\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/lifelines/fitters/coxph_fitter.py:1229\u001b[0m, in \u001b[0;36mSemiParametricPHFitter.fit\u001b[0;34m(self, df, duration_col, event_col, show_progress, initial_point, strata, weights_col, cluster_col, robust, batch_mode, timeline, formula, entry_col, fit_options)\u001b[0m\n\u001b[1;32m   1226\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mformula \u001b[38;5;241m=\u001b[39m formula\n\u001b[1;32m   1227\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mentry_col \u001b[38;5;241m=\u001b[39m entry_col\n\u001b[0;32m-> 1229\u001b[0m X, T, E, weights, entries, original_index, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_clusters \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_preprocess_dataframe\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdf\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1231\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdurations \u001b[38;5;241m=\u001b[39m T\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[1;32m   1232\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mevent_observed \u001b[38;5;241m=\u001b[39m E\u001b[38;5;241m.\u001b[39mcopy()\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/lifelines/fitters/coxph_fitter.py:1326\u001b[0m, in \u001b[0;36mSemiParametricPHFitter._preprocess_dataframe\u001b[0;34m(self, df)\u001b[0m\n\u001b[1;32m   1323\u001b[0m _clusters \u001b[38;5;241m=\u001b[39m df\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcluster_col)\u001b[38;5;241m.\u001b[39mvalues \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcluster_col \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m   1325\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mregressors \u001b[38;5;241m=\u001b[39m utils\u001b[38;5;241m.\u001b[39mCovariateParameterMappings({\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbeta_\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mformula}, df, force_no_intercept\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m-> 1326\u001b[0m X \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mregressors\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_df\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdf\u001b[49m\u001b[43m)\u001b[49m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbeta_\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m   1328\u001b[0m T \u001b[38;5;241m=\u001b[39m T\u001b[38;5;241m.\u001b[39mastype(\u001b[38;5;28mfloat\u001b[39m)\n\u001b[1;32m   1330\u001b[0m \u001b[38;5;66;03m# we check nans here because converting to bools maps NaNs to True..\u001b[39;00m\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/lifelines/utils/__init__.py:1926\u001b[0m, in \u001b[0;36mCovariateParameterMappings.transform_df\u001b[0;34m(self, df)\u001b[0m\n\u001b[1;32m   1922\u001b[0m     Xs[param_name] \u001b[38;5;241m=\u001b[39m X\n\u001b[1;32m   1924\u001b[0m \u001b[38;5;66;03m# in pandas 0.23.4, the Xs as a dict is sorted differently from the Xs as a DataFrame's columns\u001b[39;00m\n\u001b[1;32m   1925\u001b[0m \u001b[38;5;66;03m# hence we need to reorder, see https://github.com/CamDavidsonPilon/lifelines/issues/931\u001b[39;00m\n\u001b[0;32m-> 1926\u001b[0m Xs_df \u001b[38;5;241m=\u001b[39m \u001b[43mpd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconcat\u001b[49m\u001b[43m(\u001b[49m\u001b[43mXs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnames\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mparam\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcovariate\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mastype\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mfloat\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1928\u001b[0m \u001b[38;5;66;03m# we can't concat empty dataframes and return a column MultiIndex,\u001b[39;00m\n\u001b[1;32m   1929\u001b[0m \u001b[38;5;66;03m# so we create a \"fake\" dataframe (acts like a dataframe) to return.\u001b[39;00m\n\u001b[1;32m   1930\u001b[0m \u001b[38;5;66;03m# This should be removed because it's gross.\u001b[39;00m\n\u001b[1;32m   1931\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m Xs_df\u001b[38;5;241m.\u001b[39msize \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/generic.py:5912\u001b[0m, in \u001b[0;36mNDFrame.astype\u001b[0;34m(self, dtype, copy, errors)\u001b[0m\n\u001b[1;32m   5905\u001b[0m     results \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m   5906\u001b[0m         \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39miloc[:, i]\u001b[38;5;241m.\u001b[39mastype(dtype, copy\u001b[38;5;241m=\u001b[39mcopy)\n\u001b[1;32m   5907\u001b[0m         \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns))\n\u001b[1;32m   5908\u001b[0m     ]\n\u001b[1;32m   5910\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m   5911\u001b[0m     \u001b[38;5;66;03m# else, only a single dtype is given\u001b[39;00m\n\u001b[0;32m-> 5912\u001b[0m     new_data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_mgr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mastype\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   5913\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_constructor(new_data)\u001b[38;5;241m.\u001b[39m__finalize__(\u001b[38;5;28mself\u001b[39m, method\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mastype\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m   5915\u001b[0m \u001b[38;5;66;03m# GH 33113: handle empty frame or series\u001b[39;00m\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/internals/managers.py:419\u001b[0m, in \u001b[0;36mBaseBlockManager.astype\u001b[0;34m(self, dtype, copy, errors)\u001b[0m\n\u001b[1;32m    418\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mastype\u001b[39m(\u001b[38;5;28mself\u001b[39m: T, dtype, copy: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m, errors: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mraise\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m T:\n\u001b[0;32m--> 419\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapply\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mastype\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/internals/managers.py:304\u001b[0m, in \u001b[0;36mBaseBlockManager.apply\u001b[0;34m(self, f, align_keys, ignore_failures, **kwargs)\u001b[0m\n\u001b[1;32m    302\u001b[0m         applied \u001b[38;5;241m=\u001b[39m b\u001b[38;5;241m.\u001b[39mapply(f, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m    303\u001b[0m     \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 304\u001b[0m         applied \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mgetattr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mb\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mf\u001b[49m\u001b[43m)\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    305\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mTypeError\u001b[39;00m, \u001b[38;5;167;01mNotImplementedError\u001b[39;00m):\n\u001b[1;32m    306\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m ignore_failures:\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/internals/blocks.py:580\u001b[0m, in \u001b[0;36mBlock.astype\u001b[0;34m(self, dtype, copy, errors)\u001b[0m\n\u001b[1;32m    562\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m    563\u001b[0m \u001b[38;5;124;03mCoerce to the new dtype.\u001b[39;00m\n\u001b[1;32m    564\u001b[0m \n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m    576\u001b[0m \u001b[38;5;124;03mBlock\u001b[39;00m\n\u001b[1;32m    577\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m    578\u001b[0m values \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvalues\n\u001b[0;32m--> 580\u001b[0m new_values \u001b[38;5;241m=\u001b[39m \u001b[43mastype_array_safe\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalues\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    582\u001b[0m new_values \u001b[38;5;241m=\u001b[39m maybe_coerce_values(new_values)\n\u001b[1;32m    583\u001b[0m newb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmake_block(new_values)\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/dtypes/cast.py:1292\u001b[0m, in \u001b[0;36mastype_array_safe\u001b[0;34m(values, dtype, copy, errors)\u001b[0m\n\u001b[1;32m   1289\u001b[0m     dtype \u001b[38;5;241m=\u001b[39m dtype\u001b[38;5;241m.\u001b[39mnumpy_dtype\n\u001b[1;32m   1291\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1292\u001b[0m     new_values \u001b[38;5;241m=\u001b[39m \u001b[43mastype_array\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalues\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1293\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mValueError\u001b[39;00m, \u001b[38;5;167;01mTypeError\u001b[39;00m):\n\u001b[1;32m   1294\u001b[0m     \u001b[38;5;66;03m# e.g. astype_nansafe can fail on object-dtype of strings\u001b[39;00m\n\u001b[1;32m   1295\u001b[0m     \u001b[38;5;66;03m#  trying to convert to float\u001b[39;00m\n\u001b[1;32m   1296\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m errors \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mignore\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/dtypes/cast.py:1237\u001b[0m, in \u001b[0;36mastype_array\u001b[0;34m(values, dtype, copy)\u001b[0m\n\u001b[1;32m   1234\u001b[0m     values \u001b[38;5;241m=\u001b[39m values\u001b[38;5;241m.\u001b[39mastype(dtype, copy\u001b[38;5;241m=\u001b[39mcopy)\n\u001b[1;32m   1236\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1237\u001b[0m     values \u001b[38;5;241m=\u001b[39m \u001b[43mastype_nansafe\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalues\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1239\u001b[0m \u001b[38;5;66;03m# in pandas we don't store numpy str dtypes, so convert to object\u001b[39;00m\n\u001b[1;32m   1240\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(dtype, np\u001b[38;5;241m.\u001b[39mdtype) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28missubclass\u001b[39m(values\u001b[38;5;241m.\u001b[39mdtype\u001b[38;5;241m.\u001b[39mtype, \u001b[38;5;28mstr\u001b[39m):\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/dtypes/cast.py:1098\u001b[0m, in \u001b[0;36mastype_nansafe\u001b[0;34m(arr, dtype, copy, skipna)\u001b[0m\n\u001b[1;32m   1096\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m arr\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m   1097\u001b[0m     flat \u001b[38;5;241m=\u001b[39m arr\u001b[38;5;241m.\u001b[39mravel()\n\u001b[0;32m-> 1098\u001b[0m     result \u001b[38;5;241m=\u001b[39m \u001b[43mastype_nansafe\u001b[49m\u001b[43m(\u001b[49m\u001b[43mflat\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mskipna\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mskipna\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1099\u001b[0m     \u001b[38;5;66;03m# error: Item \"ExtensionArray\" of \"Union[ExtensionArray, ndarray]\" has no\u001b[39;00m\n\u001b[1;32m   1100\u001b[0m     \u001b[38;5;66;03m# attribute \"reshape\"\u001b[39;00m\n\u001b[1;32m   1101\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m result\u001b[38;5;241m.\u001b[39mreshape(arr\u001b[38;5;241m.\u001b[39mshape)  \u001b[38;5;66;03m# type: ignore[union-attr]\u001b[39;00m\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/dtypes/cast.py:1181\u001b[0m, in \u001b[0;36mastype_nansafe\u001b[0;34m(arr, dtype, copy, skipna)\u001b[0m\n\u001b[1;32m   1177\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(msg)\n\u001b[1;32m   1179\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m copy \u001b[38;5;129;01mor\u001b[39;00m is_object_dtype(arr\u001b[38;5;241m.\u001b[39mdtype) \u001b[38;5;129;01mor\u001b[39;00m is_object_dtype(dtype):\n\u001b[1;32m   1180\u001b[0m     \u001b[38;5;66;03m# Explicit copy, or required since NumPy can't view from / to object.\u001b[39;00m\n\u001b[0;32m-> 1181\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43marr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mastype\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m   1183\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m arr\u001b[38;5;241m.\u001b[39mastype(dtype, copy\u001b[38;5;241m=\u001b[39mcopy)\n",
      "\u001b[0;31mValueError\u001b[0m: could not convert string to float: ''"
     ]
    }
   ],
   "source": [
    "cph = lifelines.CoxPHFitter() #创建模型\n",
    "cph.fit(df_member, duration_col=\"入会月数\", event_col=\"已停付会费\", show_progress=False) #拟合模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 绘制会员的生存曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "Must call `fit` first.",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "Input \u001b[0;32mIn [31]\u001b[0m, in \u001b[0;36m<cell line: 2>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[38;5;66;03m# 生存曲线绘制\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m \u001b[43mcph\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpredict_survival_function\u001b[49m(df_member\u001b[38;5;241m.\u001b[39mloc[\u001b[38;5;241m3\u001b[39m])\u001b[38;5;241m.\u001b[39mplot()\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/lifelines/fitters/coxph_fitter.py:594\u001b[0m, in \u001b[0;36mCoxPHFitter.__getattr__\u001b[0;34m(self, attr)\u001b[0m\n\u001b[1;32m    591\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m attr \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_model\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m    592\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMust call `fit` first.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_model\u001b[49m, attr):\n\u001b[1;32m    595\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_model, attr)\n\u001b[1;32m    597\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m has no attribute \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_class_name, attr))\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/lifelines/fitters/coxph_fitter.py:592\u001b[0m, in \u001b[0;36mCoxPHFitter.__getattr__\u001b[0;34m(self, attr)\u001b[0m\n\u001b[1;32m    590\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__getattr__\u001b[39m(\u001b[38;5;28mself\u001b[39m, attr):\n\u001b[1;32m    591\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m attr \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_model\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m--> 592\u001b[0m         \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMust call `fit` first.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m    594\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_model, attr):\n\u001b[1;32m    595\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_model, attr)\n",
      "\u001b[0;31mAttributeError\u001b[0m: Must call `fit` first."
     ]
    }
   ],
   "source": [
    "# 生存曲线绘制\n",
    "cph.predict_survival_function(df_member.loc[3]).plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分析影响留存的因子"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "Must call `fit` first.",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "Input \u001b[0;32mIn [32]\u001b[0m, in \u001b[0;36m<cell line: 3>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m fig, ax \u001b[38;5;241m=\u001b[39m plt\u001b[38;5;241m.\u001b[39msubplots(figsize\u001b[38;5;241m=\u001b[39m(\u001b[38;5;241m12\u001b[39m,\u001b[38;5;241m7\u001b[39m)) \u001b[38;5;66;03m#画布\u001b[39;00m\n\u001b[1;32m      2\u001b[0m ax\u001b[38;5;241m.\u001b[39mset_title(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m各个特征的留存相关系数\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;66;03m#图题\u001b[39;00m\n\u001b[0;32m----> 3\u001b[0m \u001b[43mcph\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplot\u001b[49m(ax\u001b[38;5;241m=\u001b[39max)\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/lifelines/fitters/coxph_fitter.py:594\u001b[0m, in \u001b[0;36mCoxPHFitter.__getattr__\u001b[0;34m(self, attr)\u001b[0m\n\u001b[1;32m    591\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m attr \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_model\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m    592\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMust call `fit` first.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 594\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_model\u001b[49m, attr):\n\u001b[1;32m    595\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_model, attr)\n\u001b[1;32m    597\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m has no attribute \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_class_name, attr))\n",
      "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/lifelines/fitters/coxph_fitter.py:592\u001b[0m, in \u001b[0;36mCoxPHFitter.__getattr__\u001b[0;34m(self, attr)\u001b[0m\n\u001b[1;32m    590\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__getattr__\u001b[39m(\u001b[38;5;28mself\u001b[39m, attr):\n\u001b[1;32m    591\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m attr \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_model\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m--> 592\u001b[0m         \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMust call `fit` first.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m    594\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_model, attr):\n\u001b[1;32m    595\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_model, attr)\n",
      "\u001b[0;31mAttributeError\u001b[0m: Must call `fit` first."
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(12,7)) #画布\n",
    "ax.set_title('各个特征的留存相关系数') #图题\n",
    "cph.plot(ax=ax) #绘图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
